package code.class3;

import common.ArrayUtils;

/**
 * 双指针算法
 * <p>
 * https://leetcode.cn/problems/sort-array-by-parity/
 * 按奇偶排序数组i
 * 所有偶数元素移动到数组的前面，后跟所有奇数元素
 * [3,1,2,4]=>[2,4,3,1]
 */
public class Code02_sortArrayByParity {
    public static void main(String[] args) {
        int[] arr = {3, 1, 2, 4};
        arr = moveOddAndEven(arr);
        ArrayUtils.printArr(arr);
    }

    public static int[] moveOddAndEven(int[] arr) {
        // x从0，y从末尾
        int x = 0, y = arr.length - 1;
        while (x < y) {
            if (arr[x] % 2 == 0) { // 当x为偶数，x++
                x++;
            } else if (arr[y] % 2 != 0) { // 当y是奇数 y--;
                y--;
            } else { //当x为奇、y为偶数时，互换位置
                swap(arr, x++, y--);
            }
        }
        return arr;
    }

    public static void swap(int[] arr, int x, int y) {
        int t = arr[x];
        arr[x] = arr[y];
        arr[y] = t;
    }
}
